#ifndef MAINUI_H
#define MAINUI_H

#include <QWidget>
#include <QPixmap>
#include <QTreeWidgetItem>
#include <AIChatWindow.h>
#include "addwindow.h"
#include "noticewindow.h"
#include "privatechatwindow.h"
#include "FriendInfoWindow.h"
#include "groupinfowindow.h"
#include "groupchatwindow.h"
#include "creategroupwindow.h"
#include "modifyinfowindow.h"
#include "modifypwdwindow.h"
#include "aboutdimwindow.h"
#include "pyqwindow.h"
#include "mytreewidgetitem.h"


//用户信息结构体
struct st_userInfo;

namespace Ui {
class MainUI;
}

class MainUI : public QWidget
{
    Q_OBJECT

public:
    explicit MainUI(QWidget *parent = nullptr);
    ~MainUI();
    // 加载好友列表和群列表
    void loadFriendsGroups();
    // 初始化treewidget
    void initTreeWidget();
    // 初始化通知窗口
    void initNoticeWindow();
    // 初始化信号槽
    void initSigSlot();
    // 初始化设置列表
    void initSetList();
    // 获取天气信息
    void getWeather();

public:
    //获取登录窗口(方便发送信号)
    inline AddWindow* getAddWindow(){return addwindow;}
    //获取通知窗口
    inline NoticeWindow* getNoticeWindow(){return noticewindow;}
    //获取好友聊天窗口
    inline QMap<int,PrivateChatWindow*> getChatWindow(){return map_chatwindow;}


    PYQWindow *getPyqwindow() const;

    QMap<int, GroupChatWindow *> getMap_groupchatwindow() const;

    CreateGroupWindow *getCreategroupwindow() const;

signals:
    // 用户登录成功触发的信号 接收传递的用户信息
    void login_success();
    // 好友状态改变发送的信号  0 离线  1 在线
    void sign_friendStatus_change(int fuid,int status);
    //添加好友信号(添加TreeWidgetItem节点)
    void sign_addFriend(QVariant);
    // 删除好友信号(删除TreeWidgetItem节点)
    void sign_deleteFriend(int fuid);
    // 添加群聊信号（添加TreeWidgetItem节点）
    void sign_addGroup(int gid);
    // 退出群聊信号(删除TreeWidgetItem节点)
    void sign_deleteGroup(int gid);
    //私聊消息
    void sign_privateChatMsg(QVariant);
    // 群聊消息
    void sign_groupChatMsg(QVariant);
protected:
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void mouseReleaseEvent(QMouseEvent *event) override;
    // 重写窗口关闭事件
    void closeEvent(QCloseEvent *event)override;
    // qss样式无效，重写paintEvent解决
    void paintEvent(QPaintEvent* ev);
    // 事件过滤器
    bool eventFilter(QObject *obj, QEvent *event) override;
private slots:
    void slot_login_success();

    void on_treeWidget_itemPressed(QTreeWidgetItem *item, int column);

    void on_btn_addFriend_clicked();
    void on_btn_notice_clicked();
    // 更新通知图标
    void updateNoticeIcon(int flag);
    // 好友状态改变,更新好友状态
    void updateFriendStatus(int uid,int status);
    // 根据UID删除我的好友下的TreeWidgetItem
    void removeFriendItem(int fuid);
    // 根据UID添加我的好友下的TreeWidgetItem
    void addFriendItem(QVariant);
    // 根据GID删除群聊下的TreeWidgetItem
    void removeGroupItem(int gid);
    // 根据GID添加群聊下的TreeWidgetItem
    void addGroupItem(int gid);
    // 处理私聊消息
    void slot_privateChatMsg(QVariant);
    // 处理群聊消息
    void slot_groupChatMsg(QVariant);


    void on_btn_creategroup_clicked();

    void on_btn_close_clicked();

    void on_btn_min_clicked();

    void on_btn_ui_clicked();

    void on_btn_set_clicked();

    void on_btn_pyq_clicked();

    void on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column);

private:
    Ui::MainUI *ui;
    bool isDragging;                    // 是否鼠标拖曳的标志
    QPoint dragPosition;                // 鼠标拖曳坐标

    int sunsetNum;                      // 主题号,每切换一次,值+1

    const QString apiKey = "101fb88cd8785cdac4fdaf359c0e71b3"; // Replace with your API key
    const QString city = "Hunan";

    QMenu* menu;                         // 右键菜单
    QAction* action_userinfo;           // 查看用户信息
    QAction* private_chat;              // 发起聊天
    QAction* delete_friend;             // 删除好友
    QAction* action_groupinfo;          // 查看群信息
    QAction* group_chat;                // 发送信息
    QAction* quit_group;                // 退出群聊

    QMenu* set_menu;                    // 设置列表
    QAction* aboutDIM;                  // 关于龙通讯
    QAction* modify_pwd;                // 修改密码
    QAction* modify_info;               // 编辑个人资料
    QAction* chat_AI;                   // AI聊天
    QAction* open_hy;                   // 开通会员

    QTreeWidgetItem* root_friend;       //我的好友根节点
    QTreeWidgetItem* root_group;        //群聊根节点

    AddWindow* addwindow;               //添加好友/群窗口
    NoticeWindow* noticewindow;         //通知(信件)窗口
    CreateGroupWindow* creategroupwindow;   // 创建群聊窗口
    ModifyInfoWindow* modifyinfowindow; // 编辑个人资料窗口
    ModifyPwdWindow* modifypwdwindow;   // 修改密码窗口
    AboutDIMWindow* aboutDIMwindow;     // 关于龙通讯
    PYQWindow* pyqwindow;                   // 朋友圈
    AIChatWindow* aichatwindow;          // AI聊天

    QMap<int,PrivateChatWindow*> map_chatwindow;        //维护所有好友的聊天窗口
    QMap<int,FriendInfoWindow*> map_finfowindow;        //维护所有好友的个人资料窗口
    QMap<int,GroupChatWindow*> map_groupchatwindow;    //维护所有群聊窗口
    QMap<int,GroupInfoWindow*> map_ginfowindow;         //维护所有的群资料窗口
    QMap<int,MyTreeWidgetItem*> map_treeitem;           // 维护所有treeitem

};


#endif // MAINUI_H
